package com.elitel.frame.main.dao.ext;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.elitel.frame.main.entity.BaseShowfield;
import com.elitel.frame.main.entity.CfgTableFieldCustomAlias;
import com.elitel.frame.main.entity.ext.BaseShowfieldExt;

/**
 * @Description 扩展服务显示字段mapper
 * @author guoyanfei
 * @date 2017/11/15
 */
public interface ExtBaseShowfieldMapper {
	
	/**
	 * @description 通过服务ID和服务类型查询该服务的显示字段信息
	 * @param serviceId(服务Id)
	 * @param serviceType(服务类型)
	 * @return BaseShowfield集合
	 * @author guoyanfei
	 * @date 2017/11/15
	 */
	List<BaseShowfield> getShowfieldByServiceId(@Param("serviceId") String serviceId, @Param("serviceType") Integer serviceType, @Param("masterDetailId") String masterDetailId);
	
	/**
	 * @description 通过服务Id和服务类型查询服务配置的数据表显示字段信息
	 * @param serviceId(服务ID)
	 * @param serviceType(服务类型)
	 * @param masterDetailId(主从表服务:从表GUID)
	 * @return BaseShowfieldExt集合
	 * @author guoyanfei
	 * @date 2017/11/15
	 */
	List<BaseShowfieldExt> getShowfieldByPagetoTable(@Param("serviceId") String serviceId, @Param("serviceType") Integer serviceType, @Param("masterDetailId") String masterDetailId);
	
	/**
	 * @description 通过服务Id和服务类型查询服务配置的数据表显示字段信息(Mysql数据库)
	 * @param serviceId(服务ID)
	 * @param serviceType(服务类型)
	 * @param masterDetailId(主从表服务:从表GUID)
	 * @return BaseShowfieldExt集合
	 * @author guoyanfei
	 * @date 2017/11/15
	 */
	List<BaseShowfieldExt> getShowfieldByPagetoTableMysql(@Param("serviceId") String serviceId, @Param("serviceType") Integer serviceType, @Param("masterDetailId") String masterDetailId);
	
	/**
	 * @description 通过服务Id和服务类型查询服务配置的视图显示字段信息
	 * @param serviceId(服务ID)
	 * @param serviceType(服务类型)
	 * @param masterDetailId(主从表服务:从表GUID)
	 * @return BaseShowfieldExt集合
	 * @author guoyanfei
	 * @date 2017/11/15
	 */
	List<BaseShowfieldExt> getShowfieldByPagetoView(@Param("serviceId") String serviceId, @Param("serviceType") Integer serviceType, @Param("masterDetailId") String masterDetailId);
	
	/**
	 * @description 通过服务Id和服务类型查询服务配置的视图显示字段信息(Mysql数据库)
	 * @param serviceId(服务ID)
	 * @param serviceType(服务类型)
	 * @param masterDetailId(主从表服务:从表GUID)
	 * @return BaseShowfieldExt集合
	 * @author guoyanfei
	 * @date 2017/11/15
	 */
	List<BaseShowfieldExt> getShowfieldByPagetoViewMysql(@Param("serviceId") String serviceId, @Param("serviceType") Integer serviceType, @Param("masterDetailId") String masterDetailId);
	
	/**
	 * @description 通过服务ID删除服务显示字段
	 * @param serviceId(服务ID)
	 * @return 删除结果
	 * @author guoyanfei
	 * @date 2017/12/1
	 */
	Integer deleteShowfieldByServiceId(String serviceId);
	
	/**
	 * @description 通过服务ID和主从表中从表guid删除显示字段
	 * @param serviceId(服务id)
	 * @param masterDetailId(主从表中从表guid)
	 * @return 删除结果
	 * @author guoyanfei
	 * @date 2018/01/15
	 */
	Integer deleteShowfieldByServiceIdandMasterDetailID(@Param("serviceId") String serviceId,@Param("masterDetailId") String masterDetailId);

	/**
	 * show 通过服务id和从表id查询已配置的显示字段最大序号(oracle数据库)
	 * by date 2018/03/01
	 * @param serviceID 服务id
	 * @param masterdetailid 从表id
	 * @return 最大序号
	 * @author guoyanfei
	 */
	Integer selectMaxshowOrderOracle(@Param("serviceID") String serviceID, @Param("masterdetailid") String masterdetailid);

	/**
	 * show 通过服务id和从表id查询已配置的显示字段最大序号(mysql数据库)
	 * by date 2018/03/01
	 * @param serviceID 服务id
	 * @param masterdetailid 从表id
	 * @return 最大序号
	 * @author guoyanfei
	 */
	Integer selectMaxshowOrderMysql(@Param("serviceID") String serviceID, @Param("masterdetailid") String masterdetailid);

	// here is for view type
	List<CfgTableFieldCustomAlias> getCfgTablePrimaryKeyCustomAliasByServiceIdForView(String serviceId);

	// here is for origin table type
	List<CfgTableFieldCustomAlias> getCfgTablePrimaryKeyCustomAliasByServiceIdForTable(String serviceId);


    List<BaseShowfieldExt> selectAllFieldWithCode(String servicecode);
}
